package com.sw.youvote.client.quizwizard;
import com.sw.youvote.client.quizwizard.QuizCreateWizardConstants;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Button;

/** Wizard para la creacion de concursos.El objeto contiene los paneles necesarios para
 * la creacion de concurso.
 * @see com.sw.youvote.client.quizwizard  */
public class QuizCreateWizard extends Wizard{
	
	
	/** panel  para explicar los detalles del proceso de creacion*/
	private VerticalPanel procesoPanel;
	/** panel  para recoger los datos generales del concurso*/
	private VerticalPanel datosGeneralesPanel;
	/** panel  para recoger los datos de convocatoria del concurso*/
	private VerticalPanel convocatoriaPanel;
	/** panel  para recoger los datos de candidaturas del concurso*/
	private VerticalPanel candidaturasPanel;
	/** panel  para recoger los datos de admision del concurso*/
	private VerticalPanel admisionPanel;
	/** panel  para recoger los datos de ekeccion del concurso*/
	private VerticalPanel eleccionPanel;
	/** panel  para recoger los datos de resultados del concurso*/
	private VerticalPanel resultadosPanel;
	/** panel  para aceptar las condiciones del servicio*/
	private VerticalPanel condicionesPanel;
	/** panel  para indicar el resultado de la creacion del concurso*/
	private VerticalPanel resultadoCreacionPanel;
	
	/** Crea un wizard inicializando pasoActual y pasoMaximo */
	public QuizCreateWizard(){
		this.pasoActual = QuizCreateWizardConstants.PASO_MOSTRAR_PROCESO;
		this.pasoMaximo = QuizCreateWizardConstants.PASO_MOSTRAR_PROCESO;
		this.crearCabeceraPanel();
		this.crearOpcionesPanel();
		this.cabeceraPanel = new HorizontalPanel();
		this.procesoPanel = new VerticalPanel();
		this.datosGeneralesPanel = new VerticalPanel();
		this.convocatoriaPanel = new VerticalPanel();
		this.candidaturasPanel = new VerticalPanel();
		this.admisionPanel = new VerticalPanel();
		this.eleccionPanel = new VerticalPanel();
		this.resultadosPanel = new VerticalPanel();
		this.condicionesPanel = new VerticalPanel();
		this.resultadoCreacionPanel = new VerticalPanel();
		this.opcionesPanel = new HorizontalPanel();
		this.siguienteBoton = new Button();
		this.atrasBoton = new Button();
		this.cancelarBoton = new Button();
		this.finalizarBoton = new Button();
		this.salirBoton = new Button();
		
		// inicializar botones
		siguienteBoton.setText("Siguiente");
		atrasBoton.setText("Atras");
		cancelarBoton.setText("Cancelar");
		finalizarBoton.setText("Finalizar");
		salirBoton.setText("Salir");
	}
	
	/** Implementa el metodo que muestra el siguiente paso, define la maquina de estados del wizard*/
	protected void siguientePaso(){
		switch (this.pasoActual) {
		case QuizCreateWizardConstants.PASO_MOSTRAR_PROCESO :
			if (this.pasoActual >= this.pasoMaximo){
				crearProcesoPanel();
			}
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_GENERAL :
			if (this.pasoActual >= this.pasoMaximo){
				crearDatosGeneralesPanel();
			}
			
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CONVOCATORIA :
			if (this.pasoActual >= this.pasoMaximo){
				crearConvocatoriaPanel();
			}
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CANDIDATURAS :
			if (this.pasoActual >= this.pasoMaximo){
				crearCandidaturasPanel();
			}
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ADMISION :
			if (this.pasoActual >= this.pasoMaximo){
				crearAdmisionPanel();
			}
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ELECCION :
			if (this.pasoActual >= this.pasoMaximo){
				crearEleccionPanel();
			}
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_RESULTADOS :
			if (this.pasoActual >= this.pasoMaximo){
				crearResultadosPanel();
			}
			break;
		case QuizCreateWizardConstants.PASO_ACEPTAR_CONDICIONES :
			if (this.pasoActual >= this.pasoMaximo){
				crearCondicionesPanel();
			}
			break;
		case QuizCreateWizardConstants.PASO_RESULTADO_CREACION :
			if (this.pasoActual >= this.pasoMaximo){
				crearResultadoCreacionPanel();
			}
			break;
		}
	}
	
	/** Implementa el metodo que vuelve atras en el wizard, mostrando el paso anterior con los datos que 
	 * se hubieran introducido, completa las transiciones de la maquina de estados
	 */
	protected void pasoAnterior(){
		switch (this.pasoActual) {
		case QuizCreateWizardConstants.PASO_MOSTRAR_PROCESO :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_GENERAL :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CONVOCATORIA :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CANDIDATURAS :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ADMISION :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ELECCION :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_RESULTADOS :
			break;
		case QuizCreateWizardConstants.PASO_ACEPTAR_CONDICIONES :
			break;
		case QuizCreateWizardConstants.PASO_RESULTADO_CREACION :
			break;
		}
	}
	
	/** Implementa el metodo que cancela el proceso de creacion y destruye el wizard 
	 * deshace las operaciones intermedias que hubiera que deshacer, como datos temporales
	 * ya guardados */
	protected void cancelar(){
		switch (this.pasoMaximo) {
		case QuizCreateWizardConstants.PASO_MOSTRAR_PROCESO :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_GENERAL :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CONVOCATORIA :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CANDIDATURAS :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ADMISION :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ELECCION :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_RESULTADOS :
			break;
		case QuizCreateWizardConstants.PASO_ACEPTAR_CONDICIONES :
			break;
		case QuizCreateWizardConstants.PASO_RESULTADO_CREACION :
			break;
		
		}
	}
	/** implementa el metodo refreshWizard muestra el wizard en el paso en el que se encuentre 
	 */
	protected void refreshWizard(){
	}
	
	/** Implementa el metodo que realiza las operaciones al realizar una transicion,
	 * pasocompletado es el paso que se acaba de completar 
	 */
	protected void procesarTransicion(int pasoCompletado){
		switch (pasoCompletado) {
		case QuizCreateWizardConstants.PASO_MOSTRAR_PROCESO :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_GENERAL :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CONVOCATORIA :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CANDIDATURAS :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ADMISION :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ELECCION :
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_RESULTADOS :
			break;
		case QuizCreateWizardConstants.PASO_ACEPTAR_CONDICIONES :
			break;
		case QuizCreateWizardConstants.PASO_RESULTADO_CREACION :
			break;
		
		}
	}
	
	/** Implementa el metodo que decide que  botones se muestran en funcion del paso concreto
	 * de esta implementacion de Wizard 
	 * @see com.sw.youvote.client.quizwizard.Wizard#mostrarBotones(int)
	 */
	protected void mostrarBotones(int paso){
		switch (paso) {
		
		case QuizCreateWizardConstants.PASO_MOSTRAR_PROCESO :
			this.siguienteBoton.setVisible(true);
			this.atrasBoton.setVisible(false);
			this.cancelarBoton.setVisible(true);
			this.finalizarBoton.setVisible(false);
			this.salirBoton.setVisible(false);
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_GENERAL :
			this.siguienteBoton.setVisible(true);
			this.atrasBoton.setVisible(true);
			this.cancelarBoton.setVisible(true);
			this.finalizarBoton.setVisible(false);
			this.salirBoton.setVisible(false);
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CONVOCATORIA :
			this.siguienteBoton.setVisible(true);
			this.atrasBoton.setVisible(true);
			this.cancelarBoton.setVisible(true);
			this.finalizarBoton.setVisible(false);
			this.salirBoton.setVisible(false);
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_CANDIDATURAS :
			this.siguienteBoton.setVisible(true);
			this.atrasBoton.setVisible(true);
			this.cancelarBoton.setVisible(true);
			this.finalizarBoton.setVisible(false);
			this.salirBoton.setVisible(false);
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ADMISION :
			this.siguienteBoton.setVisible(true);
			this.atrasBoton.setVisible(true);
			this.cancelarBoton.setVisible(true);
			this.finalizarBoton.setVisible(false);
			this.salirBoton.setVisible(false);
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_ELECCION :
			this.siguienteBoton.setVisible(true);
			this.atrasBoton.setVisible(true);
			this.cancelarBoton.setVisible(true);
			this.finalizarBoton.setVisible(false);
			this.salirBoton.setVisible(false);
			break;
		case QuizCreateWizardConstants.PASO_DEFINIR_RESULTADOS :
			this.siguienteBoton.setVisible(true);
			this.atrasBoton.setVisible(true);
			this.cancelarBoton.setVisible(true);
			this.finalizarBoton.setVisible(false);
			this.salirBoton.setVisible(false);
			break;
		case QuizCreateWizardConstants.PASO_ACEPTAR_CONDICIONES :
			this.siguienteBoton.setVisible(false);
			this.atrasBoton.setVisible(true);
			this.cancelarBoton.setVisible(true);
			this.finalizarBoton.setVisible(true);
			this.salirBoton.setVisible(false);
			break;
		case QuizCreateWizardConstants.PASO_RESULTADO_CREACION :
			this.siguienteBoton.setVisible(false);
			this.atrasBoton.setVisible(false);
			this.cancelarBoton.setVisible(false);
			this.finalizarBoton.setVisible(false);
			this.salirBoton.setVisible(true);
			break;
		
		}
	
	}
	/** implementa el metodo que personaliza la cabecera del wizard */
	protected void initCabecera(){
		// personalizar la cabecera
	}
	/** metodo que crea el panel explicacion del proceso en el paso inicial del proceso*/
	protected void crearProcesoPanel(){
		this.procesoPanel = new VerticalPanel();
		//inicializar el panel
	}
	/** metodo que crea el panel que recoge los datos generales del concurso.*/
	protected void crearDatosGeneralesPanel(){
		this.datosGeneralesPanel = new VerticalPanel();
		//inicializar el panel
	}
	/** metodo que crea el panel que recoge los datos de convocatoria del concurso.*/
	protected void crearConvocatoriaPanel(){
		this.convocatoriaPanel = new VerticalPanel();
		//inicializar el panel
	}
	/** metodo que crea el panel que recoge los datos de candidaturas del concurso.*/
	protected void crearCandidaturasPanel(){
		this.candidaturasPanel = new VerticalPanel();
		//inicializar el panel
	}
	/** metodo que crea el panel que recoge los datos de admision de participantes del concurso.*/
	protected void crearAdmisionPanel(){
		this.admisionPanel = new VerticalPanel();
		//inicializar el panel
	}
	/** metodo que crea el panel que recoge los datos de eleccion del concurso.*/
	protected void crearEleccionPanel(){
		this.eleccionPanel = new VerticalPanel();
		//inicializar el panel
	}
	/** metodo que crea el panel que recoge los datos de resultados del concurso.*/
	protected void crearResultadosPanel(){
		this.resultadosPanel = new VerticalPanel();
		//inicializar el panel
	}
	/** metodo que crea el panel que recoge la aceptacion de condiciones del servicio.*/
	protected void crearCondicionesPanel(){
		this.condicionesPanel = new VerticalPanel();
		//inicializar el panel
	}
	/** metodo que crea el panel que muestra el resultado de creacion del concurso.*/
	protected void crearResultadoCreacionPanel(){
		this.resultadoCreacionPanel = new VerticalPanel();
		//inicializar el panel
	}		
	
	
}
